package com.example.yang.synchronizeddemo;

/**
 * Created by yang_ on 2018/3/27.
 */

public class LiftOff implements Runnable {
    protected int countDown = 10;//default
    private static int taskCount = 0;//因为是静态变量，所以再类加载的时候就会分配内存空间，初始化为0了，之后再次生成对象都不会再次初始化，静态变量只会被初始化一次
    private final int id = taskCount++;//
    public LiftOff(){}
    public LiftOff(int countDown){
        this.countDown = countDown;
    }
    public String status(){
        return "#" + id + "(" + (countDown > 0 ? countDown : "Liftoff!" + "), ");
    }
    @Override
    public void run() {
        while (countDown-- > 0){
            System.out.print(status());
            Thread.yield();
            /*如果知道已经完成了在run()方法的循环的一次迭代过程中所需要的工作，就可以给线程调度一个机制暗示：我的工作已经做的差不多了，可以让给别的线程使用CPU了。通过调用yield()来实现。
            当调用yield时，你也是在建议具有相同优先级的其他线程可以运行。
            对于任何重要的控制或在调整应用时，都不恩那个依赖于yield。实际上，yield经常被误用。
（yield并不意味着退出和暂停，只是，告诉线程调度如果有人需要，可以先拿去，我过会再执行，没人需要，我继续执行）
            调用yield的时候锁并没有被释放。*/

        }
    }
}
